package io.xxx.xbutler.sdk.domain;

import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
public class PrivateChatMessage {

    /**
     * 消息编号(整型,用于区分同一组的消息，消息编号的值需要为正整数)
     */
    @JSONField(name = "nMsgNum")
    protected Long msgNum;

    /**
     * 消息类型
     * <p>
     * 2001 文字
     * 2002 图片
     * 2003 语音(只支持amr格式)
     * 2004 视频
     * 2005 链接
     * 2006 好友名片
     * 2010 文件
     * 2013 小程序
     * 2016 音乐
     * 2017 视频号消息
     * 2019 视频号直播间
     * 2020 视频号名片
     * 2025 笔记
     * 2026 群接龙
     * 2021 位置信息 （注：安卓协议暂不支持发送 2021 定位 ，2024 聊天记录消息，2025 笔记消息），
     * 2033 引用消息
     * 2035 动态消息（石头剪刀布/骰子）
     * 2036 xml图片消息，2037视频号小店商品类型
     */
    @JSONField(name = "nMsgType")
    protected Integer msgType;

    /**
     * 文字内容（如果是图片或者链接则传图片地址[链接的图片不宜过大，建议160x160px，小于10k]；
     * 如果是（企微）好友名片，则个微传好友的微信编号（企微传好友的微信id）；
     * 如果是语音,则传语音的地址（语音的后缀必须为amr示例：<a href="">http://downsc.chinaz.net/Files/DownLoadsound1/201910/12087.amr</a>）；
     * 如果是小程序则传小程序的XML；
     * 如果是视频消息，则传视频的封面图【视频第一帧的图片链接地址，此处必传，否则视频消息类型会失败】）（@人任意位置文本消息：xxxxxxxxx@$好友编号$xxxxxxxxxxxxx@$好友编号$xxxxx（ps：xxx代表文本消息，@$好友编号$代表@的群内好友））；
     * 如果是视频号消息/视频号直播间消息/视频号名片，则传对应的XML；如果是笔记消息/聊天记录消息，则传该笔记消息/聊天记录消息的base64编码xml；
     * 动态消息 需发送动态消息，按以下参考值发送1剪刀 2石头 3布 4骰子1点 5骰子2点 6骰子3点 7骰子4点 8骰子5点 9骰子6点，视频号小店商品base64内容
     */
    protected String msgContent;

    /**
     * false则代表支持原接收再转发的模式。传true为需支持传xml模式
     */
    @JSONField(name = "is_xml")
    protected String isXml;

    /**
     * 语音时长/视频时长,时长单位：秒；当消息类型为以上两种类型时，必须传时长且时长要正确，否则会发送失败，当时长不正确时可能会有很大的禁封风险
     */
    @JSONField(name = "nVoiceTime")
    protected Integer nVoiceTime;

    /**
     * 链接标题
     */
    @JSONField(name = "vcTitle")
    protected String vcTitle;

    /**
     * 链接描述
     */
    @JSONField(name = "vcDesc")
    protected String vcDesc;

    /**
     * 链接URL，当消息为视频时，此处传视频的链接地址
     */
    @JSONField(name = "vcHref")
    protected String vcHref;

    /**
     * 发表情包时需传入值，其他可不填
     */
    @JSONField(name = "nEmojiLen")
    protected Integer nEmojiLen;

    /**
     * 发表情包时需传入值，其他可不填
     */
    @JSONField(name = "vcEmojiMd5")
    protected String vcEmojiMd5;

    /**
     * 语音原始链接，需要mp3格式（非必传）
     */
    private String originalVoiceUrl;
}
